<!DOCTYPE HTML>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=553917
-->
<html>
  <head>
    <title>Test for error handling aspect of Bug 827713</title>
    <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    <script type="application/javascript">

      var stringBundleService = 
        SpecialPowers.Cc["@mozilla.org/intl/stringbundle;1"]
                    .getService(SpecialPowers.Ci.nsIStringBundleService);
      var g_bundl =
        stringBundleService.createBundle("chrome://global/locale/mathml/mathml.properties");
      
      var g_errorInfo = {
        InvalidChild: {
          status : [false, false, false, false, false, false],
          args : [["mprescripts", "msubsup"], ["mprescripts", "msubsup"],
                 ["mprescripts", "msub"], ["none", "msub"], ["none","msup"],
                 ["none","msubsup"]]
        },

        MMultiscriptsErrors: {
          status: [false, false],
          args: ["NoBase", "SubSupMismatch"]
        }
    };
      
      var g_errorTypes = ["InvalidChild", "MMultiscriptsErrors"];
      
      function getErrorMessage(name,idx)
      {
        if (name != "MMultiscriptsErrors") {
          return g_bundl.formatStringFromName(name,g_errorInfo[name].args[idx], 
                                            g_errorInfo[name].args[idx].length);
        }
        else {
          return g_bundl.GetStringFromName(g_errorInfo[name].args[idx]);
        }
      }
    
    /** Checks the roll call to see if all expected error messages were present. */
    function processRollCall()
    {
      for (var i=0; i<g_errorTypes.length;i++) {
        for (var j = 0; j < g_errorInfo[g_errorTypes[i]].status.length; j++) {
          ok(g_errorInfo[g_errorTypes[i]].status[j],
             "\"" + getErrorMessage(g_errorTypes[i], j)
                  + "\" was expected to be in the error console.");
        }
      }
    }
    
    /** Tests a candidate to see if it is one of the expected messages and updates the 
        g_errorInfo structure if it is. */
    function doRollCall(msg)
    {
      for (var i = 0; i < g_errorTypes.length; i++) {
        for (var j = 0; j < g_errorInfo[g_errorTypes[i]].status.length; j++) {
          if (msg == getErrorMessage(g_errorTypes[i], j))
          {
            g_errorInfo[g_errorTypes[i]].status[j] = true;
          }
        }
      }
    }
    
    SpecialPowers.registerConsoleListener(
      function (msg) {
        if (msg.message == "SENTINEL") {
          processRollCall();
          SimpleTest.finish();
        } else if (msg.isScriptError) {
          doRollCall(msg.errorMessage);
        }
      });
      
    SimpleTest.waitForExplicitFinish();
  </script>
  </head>
  <body onload="SpecialPowers.postConsoleSentinel();">
    <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=827713">Mozilla Bug 827713</a>
    
    <!-- InvalidChild -->
    <math>
      <msubsup>
        <mprescripts/>
      </msubsup>
    </math>

    <math>
      <msubsup>
        <mprescripts/>
        <mprescripts/>
      </msubsup>
    </math>

    <math>
      <msub>
        <mtext>a</mtext>
        <mprescripts/>
        <mtext>a</mtext>
        <mprescripts/>
      </msub>
    </math>

    <math>
      <msub>
        <mtext>a</mtext>
        <none/>
      </msub>
    </math>

    <math>
      <msup>
        <mtext>a</mtext>
        <none/>
      </msup>
    </math>

    <math>
      <msubsup>
        <mtext>a</mtext>
        <mtext>b</mtext>
        <none/>
      </msubsup>
    </math>

    <!-- NoBase -->
    <math>
      <mmultiscripts>
        <none/>
        <mtext>b</mtext>
        <mtext>c</mtext>
      </mmultiscripts>
    </math>

    <!-- SubSupMismatch -->
    <math>
      <mmultiscripts>
        <mtext>b</mtext>
        <mtext>c</mtext>
        <mprescripts/>
        <mtext>a</mtext>
      </mmultiscripts>
    </math>
  </body>
</html>
